package cn.wolfcode.p2p.base.domain;

import cn.wolfcode.p2p.util.BitStatesUtils;
import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class UserInfo extends BaseDomain {
    /**
     * 版本
     */
    private Integer version = 0;
    /**
     *  位状态
     */
    private Long bitState = 0L;
    /**
     * 身份证号
     */
    private String idNumber;

    /**
     * 手机号
     */
    private String phoneNumber;
    /**
     * 邮箱
     */
    private String email;

    /**
     * 姓名
     */
    private String realName;

    /**
     * 住房条件
     */
    private SystemDictionaryItem houseCondition;
    /**
     * 婚姻情况
     */
    private SystemDictionaryItem marriage;
    /**
     * 子女情况
     */
    private SystemDictionaryItem kidCount;
    /**
     * 学历情况
     */
    private SystemDictionaryItem educationBackground;

    /**
     * 收入情况
     */
    private SystemDictionaryItem incomeGrade;

    /**
     * 实名认证情况
     */
    private Long realAuthId;

    /**
     * 视频认证情况
     */
    private Long videoAuthId;

    /**
     * 判断位状态
     */
    /**
     * 是否填写完基本资料
     */
    public boolean hasBasicInfo(){
        return BitStatesUtils.hasState(bitState,BitStatesUtils.OP_BASIC_INFO);
    }
    /**
     * 是否完成身份认证
     */
    public boolean hasRealAuth(){
        return BitStatesUtils.hasState(bitState,BitStatesUtils.OP_REAL_AUTH);
    }

    /**
     * 是否完成视频认证
     */
    public boolean hasVedioAuth(){
        return BitStatesUtils.hasState(bitState,BitStatesUtils.OP_VEDIO_AUTH);
    }
    /**
     * 是否完成所有以上三种认证
     */
    public boolean hasThree(){
        return hasBasicInfo() && hasRealAuth() && hasVedioAuth();
    }

    /**
     * 处在借款流程中
     */
    public boolean hasLoan(){
        return BitStatesUtils.hasState(bitState,BitStatesUtils.HAS_BIDREQUEST_IN_PROCESS);
    }


    /**
     * 添加位状态
     */
    public void addBitState(long bitState){
        long temp = BitStatesUtils.addState(this.bitState,bitState);
        this.bitState = temp;
    }

    /**
     * 去掉处在流程中的位状态
     */
    public void removeBitState(long bitState){
        long temp = BitStatesUtils.removeState(this.bitState,bitState);
        this.bitState = temp;
    }
}
